package vip.xiaozhao.intern.baseUtil.intf.mapper;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import vip.xiaozhao.intern.baseUtil.intf.entity.VV;

import java.util.List;

/**
 * 大V信息Mapper接口
 */
@Repository
public interface VVMapper {
    
    /**
     * 根据公司、部门、职位查询大V列表（分数降序排序）
     * 
     * @param companyId 公司ID
     * @param departmentId 部门ID
     * @param positionId 职位ID
     * @param limit 限制数量
     * @return 大V列表
     */
    List<VV> findByCompanyDepartmentPosition(
            @Param("companyId") Integer companyId, 
            @Param("departmentId") Integer departmentId, 
            @Param("positionId") Integer positionId,
            @Param("limit") Integer limit);
    
    /**
     * 根据公司和职位查询大V列表（跨部门）
     * 
     * @param companyId 公司ID
     * @param positionId 职位ID
     * @param excludeIds 需要排除的ID列表
     * @param limit 限制数量
     * @return 大V列表
     */
    List<VV> findByCompanyPosition(
            @Param("companyId") Integer companyId, 
            @Param("positionId") Integer positionId,
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("limit") Integer limit);
    
    /**
     * 根据职位查询大V列表（跨公司）
     * 
     * @param positionId 职位ID
     * @param excludeIds 需要排除的ID列表
     * @param limit 限制数量
     * @return 大V列表
     */
    List<VV> findByPosition(
            @Param("positionId") Integer positionId,
            @Param("excludeIds") List<Integer> excludeIds,
            @Param("limit") Integer limit);
    
    /**
     * 查询分数排名前30%的大V
     * 
     * @param companyId 公司ID
     * @param departmentId 部门ID
     * @param positionId 职位ID
     * @param limit 限制数量
     * @return 大V列表
     */
    List<VV> findTopScoreVVs(
            @Param("companyId") Integer companyId, 
            @Param("departmentId") Integer departmentId, 
            @Param("positionId") Integer positionId,
            @Param("limit") Integer limit);
    
    /**
     * 查询分数排名后70%的大V
     * 
     * @param companyId 公司ID
     * @param departmentId 部门ID
     * @param positionId 职位ID
     * @param limit 限制数量
     * @return 大V列表
     */
    List<VV> findNormalScoreVVs(
            @Param("companyId") Integer companyId, 
            @Param("departmentId") Integer departmentId, 
            @Param("positionId") Integer positionId,
            @Param("limit") Integer limit);
    
    /**
     * 更新大V周回答数据
     * 
     * @param id 大V ID
     * @param weekAnsweredNum 周已回答数
     * @param weekAnsweringNum 周未回答数
     * @return 影响行数
     */
    int updateWeekAnswerStats(
            @Param("id") Integer id,
            @Param("weekAnsweredNum") Integer weekAnsweredNum,
            @Param("weekAnsweringNum") Integer weekAnsweringNum);
    
    /**
     * 查询所有大V列表（用于定时任务更新周回答率）
     * 
     * @return 大V列表
     */
    List<VV> findAllVVs();
} 